Make support for thread-unsafe C functions optional. One of the aspects of CloudABI is that it aims to help you write code that is thread-safe out of the box. This is very important if you want to write libraries that are easy to reuse. For CloudABI we decided to not provide the thread-unsafe functions. So far this is working out pretty well, as thread-unsafety issues are detected really early on. The following patch adds a knob to libc++, _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS, that can be set to disable thread-unsafe functions that can easily be avoided in practice. The following functions are not thread-safe: - <clocale>: locale handles should be preferred over setlocale(). - <cstdlib>: mbrlen(), mbrtowc() and wcrtomb() should be preferred over their non-restartable counterparts. - <ctime>: asctime(), ctime(), gmtime() and localtime() are not thread-safe. The first two are also deprecated by POSIX. Differential Revision:http://reviews.llvm.org/D8703 Reviewed by:	marshall git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@240527 91177308-0d34-0410-b5e6-96231b3b80d8 
diff --git a/CMakeLists.txt b/CMakeLists.txt index 4289c2a..3b5df5a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt 
@@ -58,6 +58,7 @@  option(LIBCXX_ENABLE_STDIN "Build libc++ with support for stdin/std::cin." ON)  option(LIBCXX_ENABLE_STDOUT "Build libc++ with support for stdout/std::cout." ON)  option(LIBCXX_ENABLE_THREADS "Build libc++ with support for threads." ON) +option(LIBCXX_ENABLE_THREAD_UNSAFE_C_FUNCTIONS "Build libc++ with support for thread-unsafe C functions" ON)  option(LIBCXX_BUILD_32_BITS "Build 32 bit libc++" OFF)  option(LIBCXX_ENABLE_MONOTONIC_CLOCK  "Build libc++ with support for a monotonic clock. @@ -274,6 +275,11 @@  " when LIBCXX_ENABLE_THREADS is also set to OFF.")  endif()   +# LIBCXX_ENABLE_THREAD_UNSAFE_C_FUNCTIONS configuration +if (NOT LIBCXX_ENABLE_THREAD_UNSAFE_C_FUNCTIONS) + add_definitions(-D_LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS) +endif() +  # Configure for sanitizers. If LIBCXX_BUILT_STANDALONE then we have to do  # the flag translation ourselves. Othewise LLVM's CMakeList.txt will handle it.  if (LIBCXX_BUILT_STANDALONE)